package com.liannong.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.liannong.entity.Warehouse;
import com.liannong.entity.Product;
import com.liannong.vo.WarehouseVO;
import java.util.List;
import java.time.LocalDate;

public interface WarehouseService extends IService<Warehouse> {
    
    /**
     * 添加仓库记录
     * @param warehouse 仓库信息
     * @return 添加结果
     */
    boolean addWarehouse(Warehouse warehouse);
    
    /**
     * 更新仓库温度
     * @param id 仓库ID
     * @param temperature 温度
     * @return 更新结果
     */
    boolean updateTemperature(Integer id, Integer temperature);
    
    /**
     * 更新发货日期
     * @param id 仓库ID
     * @param sendDate 发货日期
     * @return 更新结果
     */
    boolean updateSendDate(Integer id, LocalDate sendDate);
    
    /**
     * 更新收货日期
     * @param id 仓库ID
     * @param recvDate 收货日期
     * @return 更新结果
     */
    boolean updateRecvDate(Integer id, LocalDate recvDate);
    
    /**
     * 根据溯源码查询仓库记录
     * @param traceCode 溯源码
     * @return 仓库记录
     */
    Warehouse getByTraceCode(String traceCode);
    
    /**
     * 根据产品名称查询仓库记录
     * @param name 产品名称
     * @return 仓库记录列表
     */
    List<Warehouse> getByName(String name);
    
    /**
     * 获取所有仓库记录列表
     * @return 仓库VO列表
     */
    List<WarehouseVO> getWarehouseList();
    
    /**
     * 获取仓库详情
     * @param warehouseId 仓库ID
     * @return 仓库VO对象
     */
    WarehouseVO getWarehouseDetail(Integer warehouseId);
    
    /**
     * 检查仓库是否可用
     * @param warehouseId 仓库ID
     * @return 是否可用
     */
    boolean checkWarehouseAvailable(Integer warehouseId);
    
    /**
     * 检查商品是否存在
     * @param productId 商品ID
     * @return 是否存在
     */
    boolean checkProductExists(Long productId);
    
    /**
     * 检查商品是否已有库存记录
     * @param productId 商品ID
     * @return 是否已有库存记录
     */
    boolean checkProductStockExists(Long productId);
    
    /**
     * 获取商品信息
     * @param productId 商品ID
     * @return 商品信息
     */
    Product getProductInfo(Long productId);
    
    /**
     * 获取商品库存
     * @param productId 商品ID
     * @return 库存数量
     */
    int getWarehouseAmount(Long productId);
    
    /**
     * 更新商品库存
     * @param productId 商品ID
     * @param newAmount 新的库存数量
     */
    void updateWarehouseAmount(Long productId, int newAmount);
    
    /**
     * 根据溯源码更新商品库存
     * @param traceCode 溯源码
     * @param newAmount 新的库存数量
     * @return 更新是否成功
     */
    boolean updateWarehouseAmountByTraceCode(String traceCode, int newAmount);
    
    /**
     * 为现有仓库记录关联商品ID
     */
    void linkWarehouseToProducts();
    
    /**
     * 创建新的仓库记录
     * @param productId 商品ID
     * @param amount 数量
     * @param origin 原产地
     * @param name 商品名称
     * @param nowTemp 当前温度
     * @return 创建的仓库记录
     */
    Warehouse createWarehouse(Long productId, java.math.BigDecimal amount, String origin, String name, Integer nowTemp);
} 